package IC.asm;
import IC.asm.decl.*;
import IC.asm.operands.*;

/**
 * An instruction visitor interface
 * 
 * @param <D> propogation down type
 * @param <U> propogation up type
 */
public interface Visitor<D,U> 
{
	// decls
	public U visit(LabelDecl that, D d);
	public U visit(ASMDecl that, D d);

	// instructions
	public U visit(Instruction that, D d);
	
	// operands
	public U visit(IntImmediate that, D d);
	public U visit(MachineReg that, D d);
	public U visit(VirtualReg that, D d);
	public U visit(Label that, D d);
	public U visit(MemOperand that, D d);
	
	// comment
	public U visit(CommentEntry that, D d);
}
